#ifndef FFMPEGVIDEO_H
#define FFMPEGVIDEO_H

#include <QString>
#include <QObject>
#include <QImage>

// FFmpeg头文件
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavdevice/avdevice.h>
#include <libavutil/avutil.h>
#include <libavutil/imgutils.h>
#include "libswresample/swresample.h"
}

class FFmpegVideo : public QObject
{
    Q_OBJECT

public:
    /**
     * @brief FFmpegVideo构造函数
     */
    FFmpegVideo();

    ~FFmpegVideo();


public:  // 值
    QString m_filename;      ///< 文件名
    QString m_outfilename;   ///< 输出文件

    AVFormatContext* avformat_context;  ///< 视频文件上下文格式
    AVCodecContext* avcodec_context;    ///< 编解码器上下文格式
    int av_stream_index;                ///< 保存视频流的索引

    qint64 m_frame_num;    ///< 帧总数
    int m_fps;             ///< 帧率
    int m_frame_id = 0;    ///< 当前帧id
    bool m_stopPlay;       ///< 停止播放
    bool m_stopProcessing; ///< 停止处理
    qint64 m_frame_timestamp; ///< 帧对应的时间戳

public:  // 函数
    bool loadVideoFile(QString filename);  ///< 加载视频


public slots:
    void play();           ///< 播放视频
    void savetoGif();      ///< 保存为gif
    void JumptotheFrame(qint64 min_frame_id, qint64 frame_id, qint64 max_frame_id); ///< 跳转到某帧

signals:
    void sig_SendOneFrame(QImage image);  ///< 发送一帧
    void sig_SendFrameNum(int num);  ///< 发送当前帧数  转换gif时
    void sig_SendFrameNum_play(int num);  ///< 发送当前帧数 播放
};

#endif // FFMPEGVIDEO_H
